/**
 * 添加购物车提交订单支付宝支付后查询订单状态是否成功 */
const AlipayFormData = require("alipay-sdk/lib/form").default;
const alipaySdk = require("../utils/alipayUtil");
const axios = require("axios");

module.exports = async function (ctx, next) {
  let out_trade_no = ctx.query.out_trade_no || "0.12209421155804412222";
  const formData = new AlipayFormData();
  formData.setMethod("get");
  formData.addField("appId", "2021000118610018");
  formData.addField("charset", "utf-8");
  formData.addField("signType", "RSA2");
  formData.addField("bizContent", {
    out_trade_no, // 订单支付时传入的商户订单号
  });
  // 通过该接口主动查询订单状态
  const result = await alipaySdk.exec(
    "alipay.trade.query",
    {},
    { formData: formData }
  );

  try {
    let data = await axios({ method: "GET", url: result });
    let r = data.data.alipay_trade_query_response;

    if (r.code === "10000") {
      switch (r.trade_status) {
        case "WAIT_BUYER_PAY":
          ctx.body = {
            success: true,
            message: "success",
            code: 200,
            timestamp: new Date().getTime(),
            result: {
              status: 0,
              massage: "交易创建，等待买家付款",
            },
          };
          break;
        case "TRADE_CLOSED":
          ctx.body = {
            success: true,
            message: "success",
            code: 200,
            timestamp: new Date().getTime(),
            result: {
              status: 1,
              massage: "未付款交易超时关闭，或支付完成后全额退款",
            },
          };
          break;
        case "TRADE_SUCCESS":
          ctx.body = {
            success: true,
            message: "success",
            code: 200,
            timestamp: new Date().getTime(),
            result: {
              status: 2,
              massage: "交易支付成功",
            },
          };
          break;
        case "TRADE_FINISHED":
          ctx.body = {
            success: true,
            message: "success",
            code: 200,
            timestamp: new Date().getTime(),
            result: {
              status: 3,
              massage: "交易结束，不可退款",
            },
          };
          break;
      }
    } else if (r.code === "40004") {
      ctx.body = {
        success: false,
        message: "交易不存在",
        code: 503,
        timestamp: new Date().getTime(),
      };
    }
  } catch (error) {
    ctx.body = {
      msg: "查询失败",
      error,
    };
  }
};

/*  r ==== data.data.alipay_trade_query_response 
  返回值
  code: '10000',
  msg: 'Success',
  buyer_logon_id: 'ali***@sandbox.com',
  // !买家实付金额，单位为元，两位小数。该金额代表该笔交易买家实际支付的金额，不包含商户折扣等金额
  buyer_pay_amount: '0.00',
  // !买家在支付宝的用户id
  buyer_user_id: '2088622956470841',
  // !买家用户类型。CORPORATE:企业用户；PRIVATE:个人用户。
  buyer_user_type: 'PRIVATE',
  // !交易中用户支付的可开具发票的金额，单位为元，两位小数。该金额代表该笔交易中可以给用户开具发票的金额
  invoice_amount: '0.00',
  // !订单支付时传入的商户订单号,和支付宝交易号不能同时为空。trade_no,out_trade_no如果同时存在优先取trade_no
  out_trade_no: '0.12209421155804412',
  // !积分支付的金额，单位为元，两位小数。该金额代表该笔交易中用户使用积分支付的金额，比如集分宝或者支付宝实时优惠等
  point_amount: '0.00',
  // !实收金额，单位为元，两位小数。该金额为本笔交易，商户账户能够实际收到的金额
  receipt_amount: '0.00', 
  // !本次交易打款给卖家的时间
  send_pay_date: '2021-08-31 19:51:52',
  // !交易的订单金额，单位为元，两位小数。该参数的值为支付时传入的total_amount
  total_amount: '199.00',
  //! 支付宝交易号  定单结束返回的
  trade_no: '2021083122001470840501671326',  
  // ! 交易状态：
  trade_status: 
    'WAIT_BUYER_PAY-交易创建，等待买家付款'\
    ‘TRADE_CLOSED-未付款交易超时关闭，或支付完成后全额退款’
    ‘TRADE_SUCCESS-交易支付成功’
    TRADE_FINISHED-交易结束，不可退款‘

*/
